import { defineStore } from 'pinia'

export const useMainStore = defineStore('main', {
  state: () => ({
    sgsToken: '',
    authToken: '',
    displayUsername: '',
    userRole: 'user', // 用户角色：'user'、'admin' 或 'system'
    userInfo: null, // 存储完整的GPO用户信息
    isDarkTheme: false,
    processedFiles: [], // 存储已处理的文件列表
  }),
  getters: {
    // 检查是否为管理员（包括系统权限）
    isAdmin: (state) => state.userRole === 'admin' || state.userRole === 'system',
    // 检查是否为系统权限
    isSystemAdmin: (state) => state.userRole === 'system',
    // 检查是否为普通管理员（不包括系统权限）
    isRegularAdmin: (state) => state.userRole === 'admin',
    // 检查是否已登录
    isLoggedIn: (state) => !!state.authToken && !!state.sgsToken,
    // 检查是否有权限访问管理功能（管理员和系统权限都可以）
    canAccessAdminFeatures: (state) => (state.userRole === 'admin' || state.userRole === 'system') && !!state.authToken,
    // 检查是否有权限访问DFF API测试（只有系统权限可以）
    canAccessDffTest: (state) => state.userRole === 'system' && !!state.authToken,
    // 获取用户角色显示名称
    userRoleDisplayName: (state) => {
      switch (state.userRole) {
        case 'system': return '系统权限'
        case 'admin': return '管理员'
        case 'user': return '普通用户'
        default: return '普通用户'
      }
    },
  },
  actions: {
    toggleTheme() {
      this.isDarkTheme = !this.isDarkTheme
    },
    // 设置用户信息（登录时调用）
    setUserInfo(userInfo) {
      console.log('Pinia setUserInfo called with:', userInfo)
      this.sgsToken = userInfo.sgsToken || ''
      this.authToken = userInfo.token || ''
      this.displayUsername = userInfo.uname || ''
      this.userRole = userInfo.role || 'user'
      this.userInfo = userInfo.userInfo || null // 存储完整的GPO用户信息
      console.log('Pinia state after setUserInfo:', {
        userRole: this.userRole,
        isAdmin: this.isAdmin,
        canAccessAdminFeatures: this.canAccessAdminFeatures,
        userInfo: this.userInfo
      })
    },
    // 清除用户信息（登出时调用）
    clearUserInfo() {
      this.sgsToken = ''
      this.authToken = ''
      this.displayUsername = ''
      this.userRole = 'user'
      this.userInfo = null
      this.processedFiles = [] // 登出时清空文件列表
    },
    // 添加已处理的文件
    addProcessedFiles(files) {
      const filesToAdd = Array.isArray(files) ? files : [files]
      this.processedFiles.push(...filesToAdd)
    },
    // 清空已处理的文件列表
    clearProcessedFiles() {
      this.processedFiles = []
    },
    // 更新文件状态（例如TRF API加载状态）
    updateFileStatus(fileId, updates) {
      const fileIndex = this.processedFiles.findIndex(file => file.fileId === fileId)
      if (fileIndex !== -1) {
        this.processedFiles[fileIndex] = { ...this.processedFiles[fileIndex], ...updates }
      }
    },
    async checkAuth () {
      return await fetch('/data/checkToken', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${this.authToken}`
        },
        body: JSON.stringify({
          sgsToken: this.sgsToken
        })
      }).then(res => res.json())
    }
  }
})